TD 11 : Normalisation FN3 et FNBC

Décomposition SPD, SPI, FN3 et FNBC

Normalisation
Décomposition
Perte de DF
Perte d'information
SPD
SPI
FN3
FNBC
Published

December 12, 2025

WarningAvec solutions

Exercice 1

L’étude d’un SI a conduit à ce diagramme des DF

Sur ce diagramme, on lit par exemple les DF:

  • \(\verb!#fournisseur! \to \verb!#nom_f!\)
  • \(\verb!#fournisseur!, \verb!#produit!, date \to \verb!#quantité!\)

L’équipe de conception vous a fourni ce modèle conceptuel

La traduction relationnelle donne ce schéma relationnel :

NoteQuestion

Déterminer si ce schéma relationnel entraine des pertes de DF ?

TipSolution

On note \(\Sigma\) l’ensemble des DF.

Chaque DF est locale à au moins une relation donc elle appartient à la projection des DF sur cette relation.

Comme \(\Sigma\) est une réunion de DF locales, toutes les DF sont préservées.

NoteQuestion

Pour chaque relation de ce schéma, déterminer les clés et vérifier si elle est en FNBC, sinon donner la forme normale optimale qu’elle vérifie.

TipSolution
  • FOURNISSEUR a pour seule clé \(\verb!#fournisseur!\) car \(\verb!#fournisseur^+!\) contient tous les autres attributs de FOURNISSEUR et c’est le seul déterminant pour ces attributs. Elle est FNBC car les DF vérifient toutes la FNBC.

  • CATEGORIE a pour seule clé \(\verb!#catégorie!\) car \(\verb!#catégorie^+!\) contient tous les autres attributs de CATEGORIE et c’est le seul déterminant pour ces attributs. Elle est FNBC car car les DF vérifient toutes la FNBC.

  • PRODUIT a pour seule clé \(\verb!#produit!\) car \(\verb!#produit^+!\) contient tous les autres attributs de PRODUIT et c’est le seul déterminant pour ces attributs. La relation est FNBC car les DF vérifient toutes la FNBC.

  • LIVRAISON a pour seule clé \(\{\verb!#fournisseur, #produit, date!\}\). La relation est FNBC car les DF vérifient toutes la FNBC.

  • APPROVISIONNE a pour seule clé \(\{\verb!#fournisseur, #produit!\}\). La relation n’est pas FNBC car dans la DF \(\verb!#produit! \to \verb!catégorie!\), le déterminant \(\verb!#produit!\) n’est pas une sur-clé.

    La DF \(\verb!#produit! \to \verb!catégorie!\) ne respecte pas la FN2 puisque le déterminant \(\{\verb!#produit!\}\) est un sous-ensemble strict de la clé.

    APPROVISIONNE est seulement en FN1.

NoteQuestion

Pour les tables qui ne sont pas FNBC, illustrer les redondances par des exemples de tuples.

TipSolution

On peut illustrer les redondances de la relation APPROVISIONNE par les tuples :

#fournisseur #produit #categorie en_stock_fournisseur
f1 p1 c1 esf1
f2 p1 c1 esf2
f3 p1 c1 esf3
NoteQuestion

En reprenant la conception du schéma, proposer un modèle E/A qui représente correctement les DF et le traduire en un modèle relationnel FNBC.

TipSolution

Corrections du MCD :

  • l’attribut \(\verb!en_stock_fournisseur!\) est en DF uniquement de \((\verb!#founisseur,#produit!)\), le lien vers l’entité CATEGORIE dans l’association approvisionne est une erreur.
  • \(\verb!quantité!\) est en DF de \((\verb!#fournisseur,#produit,date!)\) donc, pour représenter cette DF dans le MCD, il faut créer une entité DATE et ajouter un lien vers DATE à l’association a-livré.

Voici le MCD corrigé.

Sa traduction en MRD nous donne :

Les DF sont bien préservées.

La relation APPROVISIONNE est maintenant FNBC, les autres relations sont inchangées donc le schéma est FNBC.

Exercice 2

On reprend un schéma \(\mathcal{A}\) déjà étudié dans le TD précédent.

\(\mathcal{A}\)={Occupant, Adresse, Noapt, Nbpersonnes, Nbpièces, Propriétaire}.

Un tuple (o, a, n, np, nr, p) a la signification suivante : la personne o habite à l’adresse a l’appartement de numéro n avec np personnes ayant nr pièces dont le propriétaire est p.

\(\mathcal{A}\) vérifie l’ensemble \(\Sigma\) des dépendances fonctionnelles suivantes

Occupant → Adresse
Occupant → Noapt
Occupant → Nbpersonnes
Adresse → Propriétaire
Adresse, Noapt → Occupant
Adresse, Noapt → Nbpièces

On considère les décompositions suivantes:

  • Décomposition 1 :
    • \(\mathcal{A_1}\) = {Occupant, Adresse, Nbpersonnes, Propriétaire},
    • \(\mathcal{A_2}\) = {Adresse, Noapt, Occupant, Nbpièces}.
  • Décomposition 2 :
    • \(\mathcal{A_1}\) = {Occupant, Nbpersonnes},
    • \(\mathcal{A_2}\) = {Adresse, Noapt, Occupant, Nbpièces},
    • \(\mathcal{A_3}\) = {Adresse, Propriétaire}.
NoteQuestion

Montrer que \(\Sigma\) est irredondante.

TipSolution

On applique l’algorithme vu en cours :

  • Phase de sélection, comme chaque DF a un déterminé (membre de gauche) disjoint de tous les autres, elle ne peut pas être impliquée par les autres DF.

    Toutes les DF sont sélectionnées.

  • Phase de transformation en dépendances élémentaires :

    • Dans la DF \(\verb!Adresse, Noapt → Occupant!\), on ne peut pas retirer un attribut du déterminant car on obtiendrait des DF non-impliquées par \(\Sigma\), l’ensemble de DF ne serait donc plus équivalent à \(\Sigma\).
      • \(\Sigma \not \models \verb!Adresse → Occupant!\) car le déterminé n’apparaît dans aucune autre DF.
      • \(\Sigma \not \models \verb!Noapt → Occupant!\) car le déterminé n’apparaît dans aucune autre DF.
    • Idem pour \(\verb!Adresse, Noapt → Nbpièces!\)

Conclusion : \(\Sigma\) est irredondante.

NoteQuestion

Montrer que ces décompositions sont sans pertes de DF.

TipSolution
  • Dans la décomposition 1, chaque DF est locale à au moins un schéma donc elle appartient à la projection des DF sur ce schéma. Donc toutes les DF sont préservées.
  • Dans la décomposition 2, toutes les DF sont préservées pour la même raison.
NoteQuestion

En utilisant l’algorithme de poursuite, déterminer si ces décompositions sont sans pertes d’information.

TipSolution

Décomposition 1

  • \(\mathcal{A_1}\) = {Occupant, Adresse, Nbpersonnes, Propriétaire},
  • \(\mathcal{A_2}\) = {Adresse, Noapt, Occupant, Nbpièces}.

Reprenons la démarche.

Considérons une relation \(R\) de schéma \(\mathcal{A}\) vérifiant \(\Sigma\).

Notons \(R_1\) et \(R_2\) les projections de \(R\) respectivement sur \(\mathcal{A_1}\) et \(\mathcal{A_2}\).

Considérons un tuple \(t=(o, a, n, np, nr, p)\) de la jointure \(R_1 \bowtie R_2\).

On veut savoir si on a perdu de l’information en créant éventuellement un tuple qui n’éxistait pas initialement, c’est-à-dire est ce qu’on est certain que \(t \in R\) ?

De \(t \in R_1 \bowtie R_2\), on déduit :

  • \((o, a, np, p) \in R_1\) est la projection d’un tuple \((o, a, n_1, np, nr_1, p)\) de \(R\).
  • \((a, n, o, nr) \in R_2\) est la projection d’un tuple \((o, a, n, np_2, nr, p_2)\) de \(R\).

En appliquant les DF de \(\Sigma\), peut-on prouver que l’un de ces deux tuples est \(t\) ?

Occupant Adresse Noapt Nbpersonnes Nbpièces Propriétaire
\(\mathcal{A_1}\) \(o\) \(a\) \(n_1\) \(np\) \(nr_1\) \(p\)
\(\mathcal{A_2}\) \(o\) \(a\) \(n\) \(np_2\) \(nr\) \(p_2\)
  • Adresse → Propriétaire permet d’affirmer que \(p_2 = p\),
  • Occupant → Nbpersonnes permet d’affirmer que \(np_2 = np\).
Occupant Adresse Noapt Nbpersonnes Nbpièces Propriétaire
\(\mathcal{A_1}\) \(o\) \(a\) \(n_1\) \(np\) \(nr_1\) \(p\)
\(\mathcal{A_2}\) \(o\) \(a\) \(n\) \(np\) \(nr\) \(p\)

Le second tuple est \(t\) donc on est certain que \(t \in R\) et la décomposition est sans perte d’information.

TipSolution

Décomposition 2

  • \(\mathcal{A_1}\) = {Occupant, Nbpersonnes},
  • \(\mathcal{A_2}\) = {Adresse, Noapt, Occupant, Nbpièces},
  • \(\mathcal{A_3}\) = {Adresse, Propriétaire}.
Occupant Adresse Noapt Nbpersonnes Nbpièces Propriétaire
\(\mathcal{A_1}\) \(o\) \(a_1\) \(n_1\) \(np\) \(nr_1\) \(p_1\)
\(\mathcal{A_2}\) \(o\) \(a\) \(n\) \(np_2\) \(nr\) \(p_2\)
\(\mathcal{A_3}\) \(o_3\) \(a\) \(n_3\) \(np_3\) \(nr_3\) \(p\)
  • Occupant → Adresse, Noapt permet d’affirmer que \(a_1 = a\), \(n_1=n\)
Occupant Adresse Noapt Nbpersonnes Nbpièces Propriétaire
\(\mathcal{A_1}\) \(o\) \(a\) \(n\) \(np\) \(nr_1\) \(p_1\)
\(\mathcal{A_2}\) \(o\) \(a\) \(n\) \(np_2\) \(nr\) \(p_2\)
\(\mathcal{A_3}\) \(o_3\) \(a\) \(n_3\) \(np_3\) \(nr_3\) \(p\)
  • Adresse → Propriétaire permet d’affirmer que \(p_1 = p\),
  • Adresse, Noapt → Nbpièces permet d’affirmer que \(p_1 = p\).

Le premier tuple est \(t\) donc on est certain que \(t \in R\) et la décomposition est sans perte d’information.

NoteQuestion

Déterminer la FN optimale que vérifie chacune des décompositions.

TipSolution

Décomposition 1

  • \(\mathcal{A_1}\) = {Occupant, Adresse, Nbpersonnes, Propriétaire},
  • \(\mathcal{A_2}\) = {Adresse, Noapt, Occupant, Nbpièces}
    • \(\mathcal{A_1}\) a une clé : {Occupant}
    • \(\mathcal{A_2}\) a deux clés : {Occupant} et {Adresse, Noapt}.
    • \(\mathcal{A_1}\) n’est pas en FN3 car la DF Adresse \(\to\) Propriétaire ne respecte pas la FN3, Adresse n’est pas une sur-clé et Propriétaire n’appartient pas à une clé.
    • \(\mathcal{A_1}\) est en FN2 car sa seule clé ne contient qu’un attribut.
    • \(\mathcal{A_2}\) est en FNBC car toutes les DF qu’on peut appliquer à \(\mathcal{A_2}\) ont pour déterminant une sur-clé.

La décomposition est FN2 mais pas FN3 (donc à fortiori pas FNBC).

TipSolution

Décomposition 2

  • \(\mathcal{A_1}\) = {Occupant, Nbpersonnes},
  • \(\mathcal{A_2}\) = {Adresse, Noapt, Occupant, Nbpièces},
  • \(\mathcal{A_3}\) = {Adresse, Propriétaire}.
    • \(\mathcal{A_1}\) a une clé : {Occupant}
    • \(\mathcal{A_2}\) a deux clés : {Occupant} et {Adresse, Noapt}.
    • \(\mathcal{A_2}\) a une clé : {Adresse}.
  1. \(\mathcal{A_1}\), \(\mathcal{A_2}\) et \(\mathcal{A_3}\) sont FNBC car toutes les DF qu’on peut appliquer à chacun des schémas ont pour déterminant une sur-clé.

Le schéma est en FNBC, a fortiori en FN2 et FN3.

NoteQuestion

Appliquer l’algorithme de décomposition FN3 vu en cours pour obtenir une décomposition de \(\mathcal{A}\) sans pertes de DF et sans pertes d’informations.

La décomposition obtenue est-elle FNBC ?

Comparer avec les décompositions précédentes.

TipSolution

On a déjà une couverture minimale car \(\Sigma\) est irredondant.

Pour construire un décomposition FN3, il faut lister les déterminants de \(\Sigma\), en partant d’une décomposition vide.

  1. Phase 1

    • Déterminant Occupant : DF Occupant → Adresse , DF Occupant → Noapt , DF Occupant → Nbpersonnes. On ajoute le schéma \(\mathcal{A_1}\) = {Occupant, Adresse, Noapt, Nbpersonnes}
    • Déterminant Adresse, Noapt : DF Adresse, Noapt → Occupant , DF Adresse, Noapt → Nbpièces. On ajoute le schéma \(\mathcal{A_2}\) = {Adresse, Noapt, Occupant, Nbpièces}
    • Déterminant Adresse : DF Adresse → Propriétaire. On ajoute le schéma \(\mathcal{A_3}\) = {Adresse, Propriétaire}
  2. Phase 2 : tous les attributs sont déjà présents dans la décomposition donc on n’ajoute rien.

  3. Phase 3 : une des clés de \(\mathcal{A}\) (par exemple Occupant) est présente dans un des schémas donc on n’ajoute rien.

On obtient une troisième décomposition :

  • \(\mathcal{A_1}\) = {Occupant, Adresse, Noapt, Nbpersonnes}
  • \(\mathcal{A_2}\) = {Adresse, Noapt, Occupant, Nbpièces}
  • \(\mathcal{A_3}\) = {Adresse, Propriétaire}

Cette décomposition est FN3, sans perte d’information et sans perte de dépendance d’après le cours.

On constate qu’elle est FNBC.

Il y a plus de colonnes au total que dans la décomposition 2 qui était elle aussi FNBC SPI et SPD. Cette dernière décomposition est donc a priori moins intéressante.

Il y a des redondances dans cette décomposition entre \(\mathcal{A_1}\) et \(\mathcal{A_2}\) à cause d’une répétition inutile du triplet (Adresse, Noapt, Occupant) dans les deux schémas, car cette répétition est inutile à la préservation de l’information et des DF.

L’algorithme vu en cours n’assure pas une décomposition optimale !

WarningRetenir

Les normalisations FN2, FN3 et FNBC ne réduisent que les redondances internes à chaque table liées à l’existence de DF entre les attributs.

NoteQuestion

Appliquer l’algorithme de décomposition FNBC vu en cours pour obtenir une décomposition FNBC de \(\mathcal{A}\) sans pertes d’information. La décomposition préserve-t-elle toutes les DF ?

Comparer avec les décompositions précédentes.

TipSolution

L’algorithme de décomposition FNBC est un algorithme de séparation à l’opposé de l’algorithme de décomposition FN3 qui est constructif. C’est pour cette raison qu’il ne préserve pas nécessairement les DF, car les séparations peuvent briser des DF.

On démarre de la décomposition \(\{\mathcal{A}\}\).

  • \(\mathcal{A}\) a pour clés Occupant et {Adresse, Noapt} donc la seule règle de \(\Sigma\) qui ne respecte la FNBC est \(\verb!Adresse → Propriétaire!\).
    • on sépare Propriétaire auquel on ajoute son déterminant Adresse dans un nouveau schéma \(\mathcal{A_2}\).
    • \(\mathcal{A}\) est remplacé par \(\mathcal{A_1}\setminus\){Propriétaire} = {Occupant, Adresse, Noapt, Nbpersonnes, Nbpièces}.
  • \(\mathcal{A_1}\) et \(\mathcal{A_2}\) sont FNBC donc on arrête la décomposition.

On obtient une quatrième décomposition, qui est elle aussi FNBC. On sait qu’elle est sans perte d’information.

Comme toutes les DF de \(\Sigma\) sont locales à \(\mathcal{A_1}\) ou \(\mathcal{A_2}\), la décomposition est sans perte de DF.

On obtient une troisième décomposition :

  • \(\mathcal{A_1}\) = {Occupant, Adresse, Noapt, Nbpersonnes, Nbpièces}
  • \(\mathcal{A_2}\) = {Adresse, Propriétaire}

Elle totalise 7 colonnes au lieu des 8 de la décomposition 2, mais sémantiquement, elle est moins bonne car on stocke dans la même table des attributs qui concerne des personnes et des appartements.

WarningRetenir

Ces algorithmes de décomposition FN3 et FNBC n’ont pas pour vocation à remplacer une bonne modélisation conceptuelle. Les objectifs de normalisation doivent guider la conception en anticipant sur le schéma relationnel obtenu in fine. Dans certains cas compliqué, les algorithmes de décomposition FN3 et FNBC peuvent indiquer des solutions pour une bonne modélisation conceptuelle ou à défaut pour améliorer le modèle relationnel.

Exercice 3

Soit le schéma \(\mathcal{A}\)={A,B,C,D,E,F,G,H} et l’ensemble \(\Sigma\) de DF \[ BE → AC  \quad B → H  \quad F → CD  \quad D → G \]

NoteQuestion

Appliquer l’algorithme de décomposition FNBC vu en cours pour obtenir une décomposition de \(\mathcal{A}\) qui est sans pertes d’information. Déterminer quelles DF sont préservées.

TipSolution

Dans un souci de lisibilité, on utilise dans cet exercice l’écriture \(ABC\) pour noter l’ensemble \(\{A,B,C\}\).

On démarre de la décomposition \(\{\mathcal{A}\}\).

  • DF \(BE → AC.\quad\) Elle ne respecte pas la FNBC pour \(\mathcal{A}\) car \(BE^+=ABCEH\) donc \(BE\) n’est pas une sur-clé de \(\{\mathcal{A}\}\). Donc on remplace \(\mathcal{A}\) par \[ \mathcal{A}_1=BDEFG \quad \mathcal{A}_2=ABCEH\] A l’issue de cette étape \(BE → AC\) respecte la FNBC pour toutes les décompositions qui suivent.

  • DF \(B → H\).

    • Elle respecte la FNBC pour \(\mathcal{A}_1\) car \(H \notin \mathcal{A}_1\).
    • Elle ne respecte pas la FNBC pour \(\mathcal{A}_2\) car \(B^+=BH \not\supset \mathcal{A}_2\) (\(B\) n’est pas une sur-clé de \(\mathcal{A}_2\)). On remplace \(\mathcal{A}_2=ABCEH\) par \[\mathcal{A}_{21}=ABCE \quad \mathcal{A}_{22}=BH\] A l’issue de cette étape \(B → H\) respecte la FNBC pour toutes les décompositions qui suivent.
  • DF \(F → CD\)

    • Elle respecte la FNBC pour \(\mathcal{A}_{21}=ABCE\) et \(\mathcal{A}_{22}=BH\) car \(F\) n’est pas dans ces schémas.
    • Elle ne respecte pas la FNBC pour \(\mathcal{A}_1\) car \(F^+=CDFG \not\supset \mathcal{A}_1\) (\(F\) n’est pas une sur-clé de \(\mathcal{A}_1\)). On remplace \(\mathcal{A}_1=BDEFG\) par \[\mathcal{A}_{11}=BEF \quad \mathcal{A}_{12}=DFG\] A l’issue de cette étape \(F → CD\) respecte la FNBC pour toutes les décompositions qui suivent.
  • DF \(D → G\)

    • Elle respecte la FNBC pour \(\mathcal{A}_{11}=BEF\), \(\mathcal{A}_{21}=ABCE\) et \(\mathcal{A}_{22}=BH\) car \(D\) n’est pas dans ces schémas.
    • Elle ne respecte pas la FNBC pour \(\mathcal{A}_{12}=DFG\) car \(D^+=DG \not\supset \mathcal{A}_{12}\) (\(D\) n’est pas une sur-clé de \(\mathcal{A}_{12}\)). On remplace \(\mathcal{A}_{12}\) par \[\mathcal{A}_{121}=DF \quad \mathcal{A}_{122}=DG\] A l’issue de cette étape \(D → G\) respecte la FNBC pour toutes les décompositions qui suivent.

La décomposition obtenue est donc en FNBC. Elle contient les 5 schémas :

\[BEF \quad DF \quad DG \quad BH \quad ABCE\]

On rappelle que \(\Sigma\) est \[ BE → AC  \quad B → H  \quad F → CD  \quad D → G \]

La seule DF qui n’est pas locale à un des schémas est \(F\to C\).

En appliquant l’algorithme de calcul de la fermeture \(F^+_{\pi}\) par rapport à la projection de \(\Sigma\) sur la décomposition, on obtient :

\(F^+_{\pi} = FDG\) qui ne contient pas \(C\) donc la DF \(F\to C\) n’est pas préservée.

NoteQuestion

Peut-on, en ajoutant un sous-schéma à la décomposition, obtenir une décomposition FNBC sans pertes d’information et sans pertes de DF ?

TipSolution

En ajoutant le schéma \(FC\) à la décomposition précédente, on est assuré de préserver la DF \(F \to C\).

On obtient : \[BH \quad  BEAC \quad  DG \quad  FD \quad  BEF \quad  FC\] qui est en FNBC et préserve les DF. De plus elle est SPI puisque la décomposition initiale est SPI.

NB : en ajoutant \(FC\) dans un schéma à part plutôt que dans un schéma existant, on ne prend pas le risque de casser la FNBC de la décomposition obtenue précédemment. En faisant des vérifications supplémentaires, on pourrait l’ajouter à un schéma existant.

NoteQuestion

Appliquer l’algorithme de décomposition FN3 vu en cours pour obtenir une décomposition de \(\mathcal{A}\) qui est sans pertes d’information et sans pertes de dépendance. Comparer avec la décomposition précédente.

TipSolution

L’ensemble \(\Sigma\) peut-être transformé en l’ensemble de DF équivalent \(\Sigma'\) qui est irredondant \[ BE → A \quad BE → C \quad  B → H \quad F → C \quad F → D \quad  D → G \]

Pour construire une décomposition FN3, il faut lister les déterminants de \(\Sigma'\), en partant d’une décomposition vide.

  1. Phase 1

    • Déterminant \(BE\) : on ajoute \(\mathcal{A_1}\) = BEAC
    • Déterminant \(B\) : on ajoute \(\mathcal{A_2}\) = BH.
    • Déterminant \(F\) : on ajoute \(\mathcal{A_3}\) = FCD.
    • Déterminant \(D\) : on ajoute \(\mathcal{A_4}\) = DG.
  2. Phase 2 : tous les attributs sont déjà présents dans la décomposition donc on n’ajoute rien.

  3. Phase 3 : il faut déterminer si une clé de \(\mathcal{A}\) est présente dans un des schémas. Pour cela il suffit de vérifier s’il existe \(i\) tel que \(\mathcal{A_i}^+= \mathcal{A}\).

    • \(\mathcal{A_1}^+ = ABCE^+ = ABCEH \neq \mathcal{A}\) donc \(\mathcal{A_1}\) ne contient pas de clé de \(\mathcal{A}\).
    • \(\mathcal{A_2}^+ = BH^+ = BH \neq \mathcal{A}\) donc \(\mathcal{A_2}\) ne contient pas de clé de \(\mathcal{A}\).
    • \(\mathcal{A_3}^+ = FCD^+ = FCDG \neq \mathcal{A}\) donc \(\mathcal{A_3}\) ne contient pas de clé de \(\mathcal{A}\).
    • \(\mathcal{A_4}^+ = DG^+ = DG \neq \mathcal{A}\) donc \(\mathcal{A_4}\) ne contient pas de clé de \(\mathcal{A}\).

    Il faut donc ajouter un schéma contenant une clé de \(\mathcal{A}\).

    \(BEF\) est une clé de \(\mathcal{A}\) car

    • \(BE^+ = BEACH \neq \mathcal{A}\)
    • \(EF^+ = EFCDG \neq \mathcal{A}\)
    • \(BF^+ = BFCDGH \neq \mathcal{A}\)
    • \(BEF^+ = ABCDEFGH = \mathcal{A}\)

    Donc on ajoute le schéma \(\mathcal{A_5}= BEF\).

On a obtenue la décomposition FN3 SPI et SPD : \[BEAC \quad BH \quad FCD \quad DG \quad BEF\]

Dans la question précédente, on avait obtenue la décomposition FNBC SDI SPD : \[BH \quad  BEAC \quad  DG \quad  FD \quad  BEF \quad  FC\]

Ici, nous avons un schéma en moins : \(FCD\) regroupe les schémas \(FD\) et \(FC\) de la décomposition précédente.

On en déduit que les schémas \(BEAC\), \(BH\), \(DG\) et \(BEF\) sont FNBC.

Est ce que \(FCD\) est également FNBC ? Oui car \(F\) est la seule clé et aucune DF ne contredit la FNBC pour \(FCD\).

\[BEAC \quad BH \quad FCD \quad DG \quad BEF\] est donc une décomposition FNBC SPI et SPD meilleure que la précédente.

Remarque : on aurait pu l’obtenir dans la question précédente en vérifiant qu’en ajoutant \(FC\) au schéma \(FD\), la FNBC était conservée.